草庐IT

Linux IO重定向和管道

全部标签

windows - 通过网络创建 COM 端口重定向器

我正在尝试创建一个允许标准TCP/IP套接字像COM端口一样使用的Windows驱动程序。我知道有许多现有产品可以做到这一点,但找不到关于它实际如何完成的引用资料!我了解Windows驱动程序的一些概念(总线/函数/筛选器驱动程序、驱动程序堆栈等),并尝试阅读有关WDF的书,但如果没有实际内容,我仍然不能100%确定从哪里开始支持硬件。如果有人有任何有用的链接/指针,我们将不胜感激。卡扎尔 最佳答案 看看com0com项目。他们还提供com2tcp驱动程序。由于它是开源的,您可以浏览源代码并了解它是如何完成的。实际上,这不是一个驱动

windows - 使用命名管道作为文件

这里是一个简单的问题(虽然可能不是一个简单的答案):是否可以为程序使用的(现有的)命名管道指定一个路径,就好像它们在普通文件上打开一样?根据thisMSDNpage,可以使用以下路径语法引用本地计算机上的名称管道:\\.\pipe\PipeName,但我无法在标准Windows程序中使用它。顺便提一下,如果有人对与只能以比物理I/O(例如命名管道)更有效的方式使用文件系统的程序进行交互有任何建议,我很乐意采纳它们. 最佳答案 只有当程序使用Win32APICreateFile()函数打开文件时,它才会起作用。

c++ - WAN 上 Windows 命名管道的低吞吐量

我在使用Windows命名管道时遇到性能低下的问题。随着网络延迟的增加,吞吐量迅速下降。每秒发送的消息与往返时间之间大致呈线性关系。似乎客户端必须在服务器发送下一条消息之前确认每条消息。这会导致性能非常差,我每秒只能通过RTT为200毫秒的链接发送5条(~100字节)消息。管道是异步的,使用多个重叠的写入操作(以及客户端的多个重叠读取),但这并没有提高吞吐量。是否可以通过命名管道并行发送消息?管道是使用PIPE_TYPE_MESSAGE创建的,PIPE_READMODE_BYTE会更好吗?有没有其他方法可以提高性能?这是一个已部署的解决方案,所以我不能简单地用套接字连接替换管道(我读过

c++ - 创建附加到控制台但具有重定向标准 IO 句柄的进程

我有一个命令行应用程序,它根据用户提供的脚本执行其他程序。一些执行的子进程是cmd.exe运行各种.cmd脚本。一些.cmd脚本使用titleWindowsshell命令设置控制台窗口标题。这就是问题所在。如果用户请求记录子进程的输出,我使用标准句柄的管道来获取子进程的输出。然而,这似乎使子进程无法附加到我的应用程序运行所在的控制台,因此title命令停止工作,停止更改控制台窗口标题。是否可以创建一个具有重定向标准句柄但仍附加到父进程控制台的进程,以便title命令起作用? 最佳答案 显然,要将子进程附加到父控制台,所需要做的就是不

php - 为什么我不能多次打开命名管道?

我似乎无法从PHP中多次打开Windows命名管道:$pipe1=fopen($pipeName,'r+');//(1)fclose($pipe1);$pipe2=fopen($pipeName,'r+');//(2)fclose($pipe2);(1)成功,我可以写入管道或在其上打开阻塞读取。(2)失败fopen(\\.\pipe\encoding):failedtoopenstream:Invalidargument“无效参数”似乎指的是模式,但我已经尝试了(1)和(2)之间所有不同的模式组合,没有任何区别。无论是在同一个进程还是另一个进程,它也会失败。我正在创建管道:Create

Windows 完全重定向键盘输入

PC有2个USB键盘KeyboardA和KeyboardB用户1在键盘A上工作。有时用户2在键盘B上键入。任务:来自KeyboardB的所有输入重定向到文件。如果我使用SetWindowsHookEx我可以Hook输入和停止消息,但无法检测到KeyboardA或KeyboardB(有什么方法可以检测键盘?)如果我使用RegisterRawInputDevices,我会检测到KeyboardA或KeyboardB,但无法停止消息,并且KeyboardB的输入会转换为User1界面(有办法停止消息吗?)。我可能需要另一种方法将数据从键盘直接定向到特定位置吗? 最

c# - 将管道参数发送到 C# 应用程序

我需要构建一个接受管道作为输入的简单控制台应用程序。我们正在运行WindowsServer2012。数据来自另一个将输入“管道”到此应用程序的应用程序。我从Linux的角度了解管道,但从Windows的角度不太了解它们。我最好的猜测是我需要像这样向我的应用程序发送输入:C:\app.exe当使用“我的问题是,任何人都可以给我一个示例,说明如何在我的应用程序中接收流指针或类似于Windows管道的东西,以便我可以读取输入吗? 最佳答案 当您使用时和>对于应用程序,标准输入和输出流(屏幕/键盘接口(interface))被文件流取代。您

windows - WinDivert 重定向到代理

我正在尝试将所有tcp数据包重定向到我的本地代理以修改html内容(类似adblocker)。我想使用WinDivert,但它似乎不起作用。我这样启动驱动程序:handle=WinDivertOpen("outbound",WINDIVERT_LAYER_NETWORK,0,0);然后在抓包修改时:if(ip_header!=NULL&&tcp_header!=NULL){//redirecttoproxyif(ntohs(tcp_header->DstPort)==80){UINT32dst_addr=ip_header->DstAddr;ip_header->DstAddr=ip_

windows - 如何将 STDIN、STDOUT、STDERR 重定向到 Windows 批处理脚本中的文件

我见过许多示例,您可以在这些示例中将单个命令的STDin/out/err重定向到一个文件。所以我能够创建一个myLogger.bat作为包装器,将myScript的调用语句重定向到myLogFile。myLogger示例代码:CALL"%xDir%\%%1">"%lDir%\%lFil%"2>&1我从命令行执行>myLogger.batmyScriptToBeLogged.bat但是我无法重定向Windows批处理文件(.bat)中所有命令的STDin/out/err是否有类似于“exec>$logFile2>&1inshell”的东西可以包含在批处理脚本的开头,它将同一脚本的所有日志

c++ - 使用管道从子进程重定向 I/O - winapi

我正在使用一个提供api的应用程序,以便更轻松地编写脚本。基本上,当您编写有效输入时,它会输出一个答案。我想使用该输出来发送更多输入,例如:Input:Output:1,56,23InputOutput:"Apple"我想要做的是一个写入目标进程STDIN,然后从它的STDOUT读取输出的程序。为此,我主要从那里获取代码:CreatingaChildProcesswithRedirectedInputandOutput(Windows)-MSDN唯一的问题是,为了从子进程读取,我首先需要关闭用于写入它的父进程的句柄,这意味着我不能使用子进程的输出来写入更多的东西。这是从msdn中提取的